﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SushiWeb.Models;
using System.ServiceModel;
using System.Text;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
namespace SushiWeb.Controllers
{
    public class ClienteController : Controller
    {
        //
        // GET: /RegistrarCliente/

        public ActionResult Clientes()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Clientes(Cliente cliente)
        {
            string mensaje = "";
            string tipoMensaje = "";

            SeguridadWS.SeguridadClient proxySeguridad = new SeguridadWS.SeguridadClient();
            SeguridadWS.Usuario usuarioExistente = proxySeguridad.obtenerUsuarioPorUsername(cliente.Usuario);

            if (usuarioExistente != null)
            {
                //mensaje = "El nombre de usuario " + cliente.Usuario + " ya existe. Por favor, ingrese un ID valido";
                tipoMensaje = "WARN";
                SeguridadWS.SeguridadException ex = new SeguridadWS.SeguridadException { Message = "El nombre de usuario " + cliente.Usuario + " ya existe. Por favor, ingrese un ID valido" };
                throw new FaultException<SeguridadWS.SeguridadException>(ex, ex.Message);

            }
            else
            {


                string postdata0 = "{\"IdPersona\":" + idCorrelativo() + ",\"TipoDocIden\":\"DNI\",\"NumDocIden\":\"" + cliente.NumeroDocumento +
                                    "\",\"Nombres\":\"" + cliente.Nombres + "\",\"Apellidos\":\"" + cliente.Apellidos +
                                    "\",\"FecNacimiento\":\"" + cliente.FecNacimiento + "\",\"Telefono\":\"" + cliente.Telefono +
                                    "\",\"Direccion\":\"" + cliente.Direccion + "\",\"Email\":\"" + cliente.Email +
                                    "\",\"TipoPersona\":\"CLNTE\"}";

                //Prueba de creación de alumno vía HTTP POST
                byte[] data = Encoding.UTF8.GetBytes(postdata0);
                HttpWebRequest req = (HttpWebRequest)WebRequest
                    .Create("http://localhost:47850/Personas.svc/Personas");
                req.Method = "POST";
                req.ContentLength = data.Length;
                req.ContentType = "application/json";
                var reqStream = req.GetRequestStream();
                reqStream.Write(data, 0, data.Length);

                HttpWebResponse res = null;
                try
                {

                    res = (HttpWebResponse)req.GetResponse();
                    StreamReader reader = new StreamReader(res.GetResponseStream());
                    string unidadJson = reader.ReadToEnd();
                    JavaScriptSerializer js = new JavaScriptSerializer();
                    Cliente personaCreada = js.Deserialize<Cliente>(unidadJson);


                    //Crear usuario por SOAP
                    SeguridadWS.Usuario usuario_ = new SeguridadWS.Usuario();

                    usuario_.Username = cliente.Usuario;
                    usuario_.Contrasena = cliente.Contrasena;
                    usuario_.IdPersona = personaCreada.IdPersona;

                    proxySeguridad.crearUsuario(usuario_);

                    mensaje = "Los datos se grabaron satisfactoriamente";
                    tipoMensaje = "INFO";
                }
                catch (WebException ex)
                {

                    // Mostrar Error 
                    HttpWebResponse resError = (HttpWebResponse)ex.Response;
                    StreamReader reader2 = new StreamReader(resError.GetResponseStream());
                    string error = reader2.ReadToEnd();
                    JavaScriptSerializer js = new JavaScriptSerializer();
                    SeguridadWS.SeguridadException exception = js.Deserialize<SeguridadWS.SeguridadException>(error);
                    //Assert.AreEqual("El D.N.I. ingresado ya existe", exception.Message);
                    mensaje = exception.Message;
                    tipoMensaje = "WARN";
                }

                //PersonaWS.PersonasClient proxy = new PersonaWS.PersonasClient();

                //try
                //{

                //    PersonaWS.Persona clienteACrear = new PersonaWS.Persona();
                //    clienteACrear.Nombres = cliente.Nombres;
                //    clienteACrear.Apellidos = cliente.Apellidos;
                //    clienteACrear.TipoDocIden = "DNI";
                //    clienteACrear.NumDocIden = cliente.NumeroDocumento;
                //    clienteACrear.Telefono = cliente.Telefono;
                //    clienteACrear.Direccion = cliente.Direccion;
                //    clienteACrear.Email = cliente.Email;
                //    clienteACrear.FecNacimiento = cliente.FecNacimiento;
                //    clienteACrear.TipoPersona = "CLNTE";

                //    PersonaWS.Persona personaCreada = proxy.CrearPersona(cliente.Usuario, cliente.Contrasena, clienteACrear);


                //    mensaje = "Los datos se grabaron satisfactoriamente";
                //    tipoMensaje = "INFO";

                //}
                //catch (FaultException<PersonaWS.PersonaException> ex){

                //    mensaje = ex.Message;
                //    tipoMensaje = "WARN";
                //}
                //return RedirectToAction("Clientes", "Cliente");
            
            }

            return (Json(new { mensaje = mensaje, tipoMensaje = tipoMensaje, redirectTo = Url.Action("Index", "Home") }, JsonRequestBehavior.DenyGet));
        }

        private int idCorrelativo()
        {

            HttpWebRequest req2 = (HttpWebRequest)WebRequest
                    .Create("http://localhost:47850/Personas.svc/Personas");
            req2.Method = "GET";
            HttpWebResponse res2 = (HttpWebResponse)req2.GetResponse();
            StreamReader reader2 = new StreamReader(res2.GetResponseStream());
            string unidadJson2 = reader2.ReadToEnd();
            JavaScriptSerializer js2 = new JavaScriptSerializer();
            int correlativo = js2.Deserialize<int>(unidadJson2);

            return correlativo;
        }


    }
}
